home *** CD-ROM | disk | FTP | other *** search
/ PCMania 64 / PCMania CD64_1.iso / phy / phy003 / files / articulo.021 < prev    next >
Encoding:
Text File  |  1997-04-12  |  7.9 KB  |  253 lines

  1. *cX            PROGRAMACIO 3D 
  2. *c^
  3.  Hola! me llamo Skynet y en principio, voy a
  4. comenzar una especie de curso de scene (ver
  5. articulo de demoscene) donde voy a explicar
  6. las bases y los fundamentos de la programa-
  7. cion 3D. Este apartado puede que sea mas ade-
  8. lante explicado por Navi Dj. o Líyak si tu-
  9. bieran esa intencion...
  10.  
  11.  La programacion 3D es importante...es
  12. bonita...es la ostia...Bueno, pero todo eso
  13. cada uno lo sabe, aqui vamos a lo PURO Y
  14. DURO: Programacion 3D.
  15.  
  16.  Antes de seguir, hemos de decir que utiliza-
  17. remos la libreria Graph 2.0 y la razon es que
  18. ademas de ser gratis, tiene la mayoria de or-
  19. denes que utilizaremos y ademas, al estar en
  20. ASM, esto nos liberara de la carga de apren-
  21. der ASM y nos sera un factor para incrementar
  22. la velocidad. En caso de que no funcione po-
  23. deis tener un "Hot line" con su autor. {8-#
  24.  La libreria que mas utilizare es la de
  25. PASCAL. Y como tengo algo de experiencia en
  26. el uso, os dire que el archivo que os pide
  27. la TPU *cAGRFLIB.OBJ*c^ debereis especificarlo en
  28. el archivo *cAGRFLIB.PAS*c^, Este ya esta especifi-
  29. cado con la forma *cA{$L path\GRFLIB.OBJ}*c^ y
  30. debereis habilitar el path, donde hayais gra-
  31. vado la libreria. Despues compilais la unidad
  32. a disco y la copiais en el directorio TPU del
  33. pascal (UNITS o TPU por defecto).
  34.  Despues en cada programa que querais incor-
  35. porarla, solo tendreis que escribir
  36. *c  Uses xxx,xxx,Grflib;
  37. *cH
  38. LET'S GO WITH 3D!!!
  39. *c^
  40.  En principio, nos damos cuenta que el moni-
  41. tor solo tiene pantalla 2D, aqui esta el
  42. principal problema! :) Por tanto, utilizando
  43. algoritmos adecuados podremos suplir esa ca-
  44. rencia. Como crear un punto es facil:
  45. *cAPONPIXEL(X,Y,COLOR,PANTALLA)*c^ (O fPONPIXEL)
  46. *cH        X-> *cOCoordenada X de 0 a 65536 (Word)
  47. *cH        Y-> *cOCoordenada Y de 0 a 65536 (Word)
  48. *cH   Color -> *cOColor del punto de 0 a 255 (Byte)
  49. *cHPANTALLA -> *cOde 0 a 255 (Byte) La pantalla es
  50.        el lugar donde dibujaremos el pixel,
  51.        si PANTALLA=0 entonces la mostrara en
  52.        pantalla, pero si PANTALLA es asigna-
  53.        cion de la orden CREAVIRTUAL.
  54.        .
  55. *cK       PANTALLA:=CREAVIRTUAL;
  56. (** Asigna memoria para la creacion de una
  57.    pantalla virtual que tendra su propio
  58.    codigo devuelto en la variable pantalla **)
  59. *c^
  60. Lo "dificil" sera pasar un punto (X,Y,Z) a
  61. (X',Y'), pues la forma de transformar es muy
  62. facil, ademas de incorporar una variable
  63. llamada *c D*c^ (Distancia) que sera la distancia
  64. respecto a nosotros:
  65. *cH
  66.    X_2D:=(D*X_3D)/Z_3D;
  67.    Y_2D:=(D*Y_3D)/Z_3D;
  68. *c^
  69. Mi experiencia personal me ha enseñado que
  70. esto es bastante inutil con el uso de las
  71. matrices, ya que si realizo las operaciones
  72. con matrizes 3D el dibujo con X e Y es simi-
  73. lar al de la tranformacion 3D. Pero no lo es
  74. en el uso de camaras 3D dirigidas o rotacio-
  75. nes de camaras.
  76. *cj
  77. EJEMPLO DE USO:*cv Archivo Stars.Pas
  78. *cK    (Es el tipico ejemplo...lo siento..)
  79. *c^
  80. Una vez sabemos representar un punto en tres
  81. dimensiones en la pantalla, lo siguiente es
  82. saber modificarlo, ya que los puntos en 3D
  83. nos pueden servir como el esqueleto de verti-
  84. ces de un objeto complejo.
  85.  Las modificaciones basicas que se pueden
  86. hacer son las siguientes:
  87. *cH
  88.    ** Rotacion en uno de sus ejes de la
  89.      estructura de puntos
  90.    ** Rotacion multiple de sus ejes
  91.    ** Transladar el objeto
  92.    ** Escalar el objeto
  93.    ** Invertirlo
  94. *c^
  95.  Para cada opcion, existen algunas operacio-
  96. nes con matrices que realizan la operacion
  97. deseada. Estas matrices son correctas y po-
  98. deis consultar mas sobre este tipo de matema-
  99. ticas en libros de geometria analitica, alge-
  100. bra lineal, trigonometria y similares...
  101. (APRENDEDLO SOLO SI OS GUSTA!!! ya que el
  102. estudio obligado, es el peor castigo :)  )
  103.  
  104. Como deciamos, no vamos a demostrar el porque
  105. de esos resultados, solo mostraremos la for-
  106. mula de las matrices, ya que su implementa-
  107. cion es muy facil ademas de ser muy rapida.
  108. *cH
  109. Translacion: (sintaxis del mathlab)
  110. [1 0 0 0;
  111.  0 1 0 0;
  112.  0 0 1 0;
  113.  a b c 1]
  114.  
  115.  Donde a=-p(cos(q)*sin(w))
  116.    b=-p(sin(q)*sin(w))
  117.       c=-p(cos(w))
  118.  
  119. i donde p=Raiz(x^2+y^2+z^2)
  120.       q=arctan(x/y)
  121.       w=arccos(z/p)
  122. *c^
  123.  FANTASTICO!! Con solo una operacion, obtene-
  124. mos una translacion con cordenadas esfericas,
  125. donde solo tendremos que introducir los
  126. datos.
  127. *cH
  128. Rotacion:
  129. Eje Y:
  130. [ a 0 b;  Donde a=cos(Angulo de rotacion Y)
  131.   0 1 0;        b=sin(Angulo de rotacion Y)
  132.  -b 0 a]
  133.  
  134. Eje Z:
  135. [ 1  0  0;  Donde a=cos(Angulo de rotacion Z)
  136.   0  a -b;        b=sin(Angulo de rotacion Z)
  137.   0  b  a]
  138.  
  139. Eje X:
  140. [ a -b  0;  Donde a=cos(Angulo de rotacion X)
  141.   b  a  0;        b=sin(Angulo de rotacion Y)
  142.   0  0  1]
  143. *c^
  144. Una vez tenemos las principales herramientas
  145. 3D, unicamente falta aplicarlas y como todos
  146. estais en la UNIVERSIDAD (¿?), se supone que
  147. sabreis despejarlas, para obtener la rota-
  148. cion... QUE NO SABEIS???!??!!?!?!??   ;-)
  149. Luego dicen que la selectividad es dura...
  150.  
  151. En uno de los programas realizados, la
  152. rotacion la he implementadp con los siguien-
  153. tes procedimientos. Para reutilitzarlos,
  154. unicamente, deberas canviar la estructura de
  155. los parametros del procedure...
  156. *cH
  157. COST =0.999847695156391239157;
  158. SINT =0.017452406437283512819;
  159.         {Para acelerar el calculo}
  160. Procedure Rotx(var Dades:Array of TresD);
  161.    Var i : integer;
  162.    Begin
  163.      for i := 0 to MAXVERTEX do
  164.        begin
  165.          dades[i].y := dades[i].y ** COST +
  166.                        dades[i].z ** SINT;
  167.          dades[i].z :=-dades[i].y ** SINT +
  168.                        dades[i].z ** COST;
  169.        end;
  170.    End;
  171.  
  172. Procedure Roty(var dades:Array of TresD);
  173.    Var i : integer;
  174.    Begin
  175.      For i := 0 to MAXVERTEX do
  176.        Begin
  177.          dades[i].x := dades[i].x ** COST -
  178.                        dades[i].z ** SINT;
  179.          dades[i].z := dades[i].x ** SINT +
  180.                        dades[i].z ** COST;
  181.        End;
  182.    End;
  183.  
  184. Procedure Rotz(var dades:Array of TresD);
  185.    Var i : integer;
  186.    Begin
  187.       For i := 0 to MAXVERTEX do
  188.         Begin
  189.            dades[i].x := dades[i].x ** COST +
  190.                          dades[i].y ** SINT;
  191.            dades[i].y :=-dades[i].x ** SINT +
  192.                          dades[i].y ** COST;
  193.         End;
  194.    End;
  195. *c^
  196. EJEMPLO SKYNET.PAS  Como veis, este sencillo
  197. programa daria el pego en una rutina algo
  198. mejorada, con texturas y demas... Lo impor-
  199. tante de este ejemplo es el motor...
  200.  
  201. *cO
  202. RECORDAD LAS NORMAS PRINCIPALES DE
  203.  PROGRAMACION GRAFICA:
  204. *cK
  205. - No calculeis mas cosas de las que hacen
  206.   falta
  207. - No hagais 40000 la misma operacion,
  208.   guardadla
  209. - Podeis intentar hacer tablas de cosenos
  210.   prediseñadas
  211. - No calculeis todos los poligonos con
  212.   textura, solo los que se ven
  213. - Coged atajos de programacion
  214. - Pegadle mucho a vuestro hermano
  215. - y por ultimo...pero la mas triste:
  216.    en la programacion de demos aun no hay
  217.    lugar para las chicas  :_(
  218.  
  219. *c^
  220.  
  221. Una vez sabemos representar y modificar
  222. vertices en el espacio podemos hacer
  223. muchisimas cosas, asi que os dejo de tiempo
  224. hasta la proxima Phymosys Magazine para que
  225. apliqueis estos conceptos basicos...lo que
  226. viene si que es bueno!:
  227.   - Poligonos, Texturas, Plasma, Pantallas
  228.     Virtuales, archivos graficos,
  229.   efectos, y un sinfin de conceptos que
  230.   aprender.... Nos vemos...
  231. *cv
  232. Si alguien tiene interes en intercanviar
  233. rutinas graficas, codigos fuente,
  234. utilidades y demas relacionado con la
  235. demoscene:
  236. *cj     amarfer@alufis34.ffisic.uv.es
  237. *c^
  238. Por cierto, os dejo una beta del nuevo
  239. conversor de imagenes del 3D Studio que
  240. estoy haciendo...como no esta terminado,
  241. no incorporo el codigo fuente. Si a
  242. alguno le interesa, ya sabe mi direccion...
  243. =============================================
  244. RECOMIENDO: Sites de Grupos de demoscene...
  245. por ejemplo BLASTERSOUND, Graph 2.0 y
  246. "Lenguaje Ensamblador y programacion de
  247. compatibles" de Prentice Hall ademas de todas
  248. las NEWS de demoscene.
  249. PROXIMO: Incorporacion de musica a demos,
  250.          pantallas virtuales y poligonos.
  251.  
  252.                       *cG             Skynet
  253.